#ifndef Parser_H
#define Parser_H

#include <stdbool.h>
#include <stddef.h>

/* *****************************************************************
 *                DEFINICION DE LOS TIPOS DE DATOS
 * *****************************************************************/


typedef struct _Parser Parser_t;

/* *****************************************************************
 *                Funciones internas
 * *****************************************************************/

bool _CaracterValido(char caracter);
char _ConvertirAMinuscula(char caracter);

/* *****************************************************************
 *                    PRIMITIVAS DEL Parser
 * *****************************************************************/

// Crea un Parser
// Post: devuelve un Parser.
Parser_t* Parser_crear(char* linea,int numeroArchivo, int posUltimoCaracterLeido, int ultimaPalabra);

//Parsea
char* Parser_parsear(Parser_t* Parser);

// Destruye el Parser.
void Parser_destruir(Parser_t * parser);

//Devuelve el numero del archivo del cual corresponde la linea a parsear
int Parser_numeroDelArchivo(Parser_t* Parser);

//Devuele el offset del archivo con respecto a la pos 0 del archivo
int Parser_offset(Parser_t* Parser);

//me devuelve el largo de la ultima letra parseada
int Parser_LargoUltimaPalabra(Parser_t* Parser);

//Me devuelve true si el parseador termino de parser la linea
bool Parser_TerminoDeParsear(Parser_t* Parser);

// Devuelve la posicion del cursor con respecto al 0 del archivo.
int Parser_posicionEnArchivo(Parser_t * Parser);

// Devuelve el numero de palabra de la ultima palabra parseada
int Parser_numeroDePalabra(Parser_t * Parser);

#endif //  Parser_H
